{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Objective\n",
    "* 20181225: \n",
    "    * Predict stock price in next day using XGBoost\n",
    "    * Given prices and other features for the last N days, we do prediction for day N+1\n",
    "    * Here we split 3 years of data into train(60%), dev(20%) and test(20%)\n",
    "* 20190110 - Diff from StockPricePrediction_v1_xgboost.ipynb:\n",
    "    * Here we scale the train set to have mean 0 and variance 1, and apply the same transformation to dev and test sets\n",
    "* 20190111 - Diff from StockPricePrediction_v1a_xgboost.ipynb:\n",
    "    * Here for the past N values for the dev set, we scale them to have mean 0 and variance 1, and do prediction on them"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import math\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import time\n",
    "\n",
    "from matplotlib import pyplot as plt\n",
    "from pylab import rcParams\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from tqdm import tqdm_notebook\n",
    "from xgboost import XGBRegressor\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "#### Input params ##################\n",
    "stk_path = \"./data/VTI.csv\"\n",
    "test_size = 0.2                # proportion of dataset to be used as test set\n",
    "cv_size = 0.2                  # proportion of dataset to be used as cross-validation set\n",
    "N = 7                          # for feature at day t, we use lags from t-1, t-2, ..., t-N as features\n",
    "\n",
    "n_estimators = 100             # for the initial model before tuning. default = 100\n",
    "max_depth = 3                  # for the initial model before tuning. default = 3\n",
    "learning_rate = 0.1            # for the initial model before tuning. default = 0.1\n",
    "min_child_weight = 1           # for the initial model before tuning. default = 1\n",
    "subsample = 1                  # for the initial model before tuning. default = 1\n",
    "colsample_bytree = 1           # for the initial model before tuning. default = 1\n",
    "colsample_bylevel = 1          # for the initial model before tuning. default = 1\n",
    "train_test_split_seed = 111    # 111\n",
    "model_seed = 100\n",
    "\n",
    "fontsize = 14\n",
    "ticklabelsize = 14\n",
    "####################################"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>adj_close</th>\n",
       "      <th>volume</th>\n",
       "      <th>month</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-11-25</td>\n",
       "      <td>107.510002</td>\n",
       "      <td>107.660004</td>\n",
       "      <td>107.250000</td>\n",
       "      <td>107.470001</td>\n",
       "      <td>101.497200</td>\n",
       "      <td>1820300</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-11-27</td>\n",
       "      <td>107.589996</td>\n",
       "      <td>107.760002</td>\n",
       "      <td>107.220001</td>\n",
       "      <td>107.629997</td>\n",
       "      <td>101.648300</td>\n",
       "      <td>552400</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-11-30</td>\n",
       "      <td>107.779999</td>\n",
       "      <td>107.849998</td>\n",
       "      <td>107.110001</td>\n",
       "      <td>107.169998</td>\n",
       "      <td>101.213867</td>\n",
       "      <td>3618100</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-12-01</td>\n",
       "      <td>107.589996</td>\n",
       "      <td>108.209999</td>\n",
       "      <td>107.370003</td>\n",
       "      <td>108.180000</td>\n",
       "      <td>102.167740</td>\n",
       "      <td>2443600</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-12-02</td>\n",
       "      <td>108.099998</td>\n",
       "      <td>108.269997</td>\n",
       "      <td>106.879997</td>\n",
       "      <td>107.050003</td>\n",
       "      <td>101.100533</td>\n",
       "      <td>2937200</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        date        open        high         low       close   adj_close  \\\n",
       "0 2015-11-25  107.510002  107.660004  107.250000  107.470001  101.497200   \n",
       "1 2015-11-27  107.589996  107.760002  107.220001  107.629997  101.648300   \n",
       "2 2015-11-30  107.779999  107.849998  107.110001  107.169998  101.213867   \n",
       "3 2015-12-01  107.589996  108.209999  107.370003  108.180000  102.167740   \n",
       "4 2015-12-02  108.099998  108.269997  106.879997  107.050003  101.100533   \n",
       "\n",
       "    volume  month  \n",
       "0  1820300     11  \n",
       "1   552400     11  \n",
       "2  3618100     11  \n",
       "3  2443600     12  \n",
       "4  2937200     12  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv(stk_path, sep = \",\")\n",
    "\n",
    "# Convert Date column to datetime\n",
    "df.loc[:, 'Date'] = pd.to_datetime(df['Date'],format='%Y-%m-%d')\n",
    "\n",
    "# Change all column headings to be lower case, and remove spacing\n",
    "df.columns = [str(x).lower().replace(' ', '_') for x in df.columns]\n",
    "\n",
    "# Get month of each sample\n",
    "df['month'] = df['date'].dt.month\n",
    "\n",
    "# Sort by datetime\n",
    "df.sort_values(by='date', inplace=True, ascending=True)\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x10ef82128>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nBADTLGwXERH5wJIlslemYcsWKV97TQK2t94CrrnGTDMRDKZOBdLSAr8wgagqlv1PRmu9CkBmubrT\nDqeNAOiy41EAPtJiHYCmSqlYq9pGRETeee014I475Pizz6RXbPduOU9KAsaOBV56ybz/gw/838aq\nhIUBbdoEuhVEVfP7nDOl1IsAxgE4BWBwWXVbAIccbkstqzvi39YREVF5r74qG3tffjmwYgXwww/A\nwIHArFnAqFFA167A+PHAnDnArl1ASYl8b+NGoGXLwLadKBQprbX7u7x9uFIJAJZorXu6uDYJQITW\n+jml1DcAXtZary679gOAJ7XWG118bwJk6BMxMTH9FixYYFn7g0FOTg4irVzzHWB2fz+A7xjq7Pxu\nhqresbQUGDbsUrRpk4dZs37FhAn9sXev3NuqVT5ee20r4uPPIDe3LjIz62P37ii8+KJkZV25MtFf\nr+CW3f8c+X6hYfDgwRu11v3d3qi1tuwDIAHA9kquxRvXAEwHMNbh2m4Ase6e369fP213K1euDHQT\nLGX399Oa7xjq7PxuhqreMS1Na0A+SpnHgNZvvFHx/qQk83owsfufI98vNABI0h7ET36dpqmU6uJw\nOhLArrLjrwCMK1u1OQDAKa01hzSJiALs4EHz2Bho+dOfgKuuAm6/veL98fH+aReRnVmZSmM+gLUA\nuimlUpVSdwJ4RSm1XSm1FcBQAMY6n6UA9gFIBvABgPutahcREXnuv/+V8pFHzLoLLgCWLgVatap4\nfzClzSAKVZYtCNBaj3VR/WEl92oAE61qCxEReS43V/aeXL8eeO89oHdv4JVXgLlzgYyMqgMwpaRH\nbeBA/7WXyG64QwAREWHHDgm6zpwBOnY061u2BL75RjLqt2wpwdmQIVU/66OPrG0rkd0xOCMiIowY\nIeXFF5t1U6ZIL1iLFnL+xRfAvn2cV0ZkNQZnRES1XGGhwoEDcnzggMwp++yzislau3WTDxFZK4g2\n1SAiokA4cSICAHD33UDjxsCddzKLPlEgseeMiKiWO3YsHIBsvfT227LFEREFDoMzIqJa7rvvYlCv\nHnD22UD9+oFuDRFxWJOIqBbLygJ++CEG994LtG4d6NYQEcDgjIioVvvsM6CoqA7Gjw90S4jIwOCM\niKgWmzcPiIs7g379At0SIjIwOCMiqqXS0oDEROCKK45BqUC3hogMDM6IiGqpBQtkM/MhQ44HuilE\n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\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x110f186a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot adjusted close over time\n",
    "rcParams['figure.figsize'] = 10, 8 # width 10, height 8\n",
    "\n",
    "ax = df.plot(x='date', y='adj_close', style='b-', grid=True)\n",
    "ax.set_xlabel(\"date\")\n",
    "ax.set_ylabel(\"USD\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Split into train, dev and test set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "num_train = 453\n",
      "num_cv = 151\n",
      "num_test = 151\n",
      "train.shape = (453, 8)\n",
      "cv.shape = (151, 8)\n",
      "train_cv.shape = (604, 8)\n",
      "test.shape = (151, 8)\n"
     ]
    }
   ],
   "source": [
    "# Get sizes of each of the datasets\n",
    "num_cv = int(cv_size*len(df))\n",
    "num_test = int(test_size*len(df))\n",
    "num_train = len(df) - num_cv - num_test\n",
    "print(\"num_train = \" + str(num_train))\n",
    "print(\"num_cv = \" + str(num_cv))\n",
    "print(\"num_test = \" + str(num_test))\n",
    "\n",
    "# Split into train, cv, and test\n",
    "train = df[:num_train]\n",
    "cv = df[num_train:num_train+num_cv]\n",
    "train_cv = df[:num_train+num_cv]\n",
    "test = df[num_train+num_cv:]\n",
    "\n",
    "print(\"train.shape = \" + str(train.shape))\n",
    "print(\"cv.shape = \" + str(cv.shape))\n",
    "print(\"train_cv.shape = \" + str(train_cv.shape))\n",
    "print(\"test.shape = \" + str(test.shape))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Scale the train, dev and test set and combine them to do feature engineering"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "scaler.mean_ = [1.13179757e+02 1.13586225e+02 1.12691545e+02 1.13190088e+02\n",
      " 1.09092171e+02 2.59281148e+06]\n",
      "scaler.var_ = [8.18020920e+01 7.97106998e+01 8.39537740e+01 8.15594150e+01\n",
      " 9.51990222e+01 1.88602129e+12]\n",
      "train_scaled.shape = (453, 6)\n",
      "train_scaled.shape = (453, 8)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>adj_close</th>\n",
       "      <th>volume</th>\n",
       "      <th>date</th>\n",
       "      <th>month</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.626877</td>\n",
       "      <td>-0.663773</td>\n",
       "      <td>-0.593885</td>\n",
       "      <td>-0.633382</td>\n",
       "      <td>-0.778413</td>\n",
       "      <td>-0.562512</td>\n",
       "      <td>2015-11-25</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.618032</td>\n",
       "      <td>-0.652573</td>\n",
       "      <td>-0.597159</td>\n",
       "      <td>-0.615666</td>\n",
       "      <td>-0.762926</td>\n",
       "      <td>-1.485746</td>\n",
       "      <td>2015-11-27</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.597024</td>\n",
       "      <td>-0.642492</td>\n",
       "      <td>-0.609164</td>\n",
       "      <td>-0.666601</td>\n",
       "      <td>-0.807452</td>\n",
       "      <td>0.746574</td>\n",
       "      <td>2015-11-30</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.618032</td>\n",
       "      <td>-0.602170</td>\n",
       "      <td>-0.580788</td>\n",
       "      <td>-0.554764</td>\n",
       "      <td>-0.709689</td>\n",
       "      <td>-0.108650</td>\n",
       "      <td>2015-12-01</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.561644</td>\n",
       "      <td>-0.595450</td>\n",
       "      <td>-0.634266</td>\n",
       "      <td>-0.679888</td>\n",
       "      <td>-0.819067</td>\n",
       "      <td>0.250770</td>\n",
       "      <td>2015-12-02</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       open      high       low     close  adj_close    volume       date  \\\n",
       "0 -0.626877 -0.663773 -0.593885 -0.633382  -0.778413 -0.562512 2015-11-25   \n",
       "1 -0.618032 -0.652573 -0.597159 -0.615666  -0.762926 -1.485746 2015-11-27   \n",
       "2 -0.597024 -0.642492 -0.609164 -0.666601  -0.807452  0.746574 2015-11-30   \n",
       "3 -0.618032 -0.602170 -0.580788 -0.554764  -0.709689 -0.108650 2015-12-01   \n",
       "4 -0.561644 -0.595450 -0.634266 -0.679888  -0.819067  0.250770 2015-12-02   \n",
       "\n",
       "   month  \n",
       "0     11  \n",
       "1     11  \n",
       "2     11  \n",
       "3     12  \n",
       "4     12  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Converting dataset into x_train and y_train\n",
    "# Here we only scale the train dataset, and not the entire dataset to prevent information leak\n",
    "scaler = StandardScaler()\n",
    "train_scaled = scaler.fit_transform(train[['open', 'high', 'low', 'close', 'adj_close', 'volume']])\n",
    "print(\"scaler.mean_ = \" + str(scaler.mean_))\n",
    "print(\"scaler.var_ = \" + str(scaler.var_))\n",
    "print(\"train_scaled.shape = \" + str(train_scaled.shape))\n",
    "\n",
    "# Convert the numpy array back into pandas dataframe\n",
    "train_scaled = pd.DataFrame(train_scaled, columns=['open', 'high', 'low', 'close', 'adj_close', 'volume'])\n",
    "train_scaled[['date', 'month']] = train[['date', 'month']]\n",
    "print(\"train_scaled.shape = \" + str(train_scaled.shape))\n",
    "train_scaled.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cv_scaled.shape = (151, 8)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>adj_close</th>\n",
       "      <th>volume</th>\n",
       "      <th>date</th>\n",
       "      <th>month</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.664030</td>\n",
       "      <td>1.668193</td>\n",
       "      <td>1.678390</td>\n",
       "      <td>1.679755</td>\n",
       "      <td>1.685439</td>\n",
       "      <td>-0.800693</td>\n",
       "      <td>2017-09-14</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.672876</td>\n",
       "      <td>1.683874</td>\n",
       "      <td>1.692577</td>\n",
       "      <td>1.706331</td>\n",
       "      <td>1.709497</td>\n",
       "      <td>-0.772950</td>\n",
       "      <td>2017-09-15</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.732582</td>\n",
       "      <td>1.737638</td>\n",
       "      <td>1.746055</td>\n",
       "      <td>1.740657</td>\n",
       "      <td>1.740569</td>\n",
       "      <td>-0.582900</td>\n",
       "      <td>2017-09-18</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.755799</td>\n",
       "      <td>1.737638</td>\n",
       "      <td>1.763518</td>\n",
       "      <td>1.747300</td>\n",
       "      <td>1.746584</td>\n",
       "      <td>-0.983825</td>\n",
       "      <td>2017-09-19</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.760223</td>\n",
       "      <td>1.749959</td>\n",
       "      <td>1.736233</td>\n",
       "      <td>1.770553</td>\n",
       "      <td>1.767632</td>\n",
       "      <td>-0.628847</td>\n",
       "      <td>2017-09-20</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       open      high       low     close  adj_close    volume       date  \\\n",
       "0  1.664030  1.668193  1.678390  1.679755   1.685439 -0.800693 2017-09-14   \n",
       "1  1.672876  1.683874  1.692577  1.706331   1.709497 -0.772950 2017-09-15   \n",
       "2  1.732582  1.737638  1.746055  1.740657   1.740569 -0.582900 2017-09-18   \n",
       "3  1.755799  1.737638  1.763518  1.747300   1.746584 -0.983825 2017-09-19   \n",
       "4  1.760223  1.749959  1.736233  1.770553   1.767632 -0.628847 2017-09-20   \n",
       "\n",
       "   month  \n",
       "0      9  \n",
       "1      9  \n",
       "2      9  \n",
       "3      9  \n",
       "4      9  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Do scaling for dev set\n",
    "cv_scaled  = scaler.transform(cv[['open', 'high', 'low', 'close', 'adj_close', 'volume']])\n",
    "\n",
    "# Convert the numpy array back into pandas dataframe\n",
    "cv_scaled = pd.DataFrame(cv_scaled, columns=['open', 'high', 'low', 'close', 'adj_close', 'volume'])\n",
    "cv_scaled[['date', 'month']] = cv.reset_index()[['date', 'month']]\n",
    "print(\"cv_scaled.shape = \" + str(cv_scaled.shape))\n",
    "cv_scaled.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test_scaled.shape = (151, 8)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>adj_close</th>\n",
       "      <th>volume</th>\n",
       "      <th>date</th>\n",
       "      <th>month</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2.719927</td>\n",
       "      <td>2.752413</td>\n",
       "      <td>2.632263</td>\n",
       "      <td>2.686285</td>\n",
       "      <td>2.780305</td>\n",
       "      <td>-0.407123</td>\n",
       "      <td>2018-04-23</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.755308</td>\n",
       "      <td>2.755773</td>\n",
       "      <td>2.419443</td>\n",
       "      <td>2.503582</td>\n",
       "      <td>2.612709</td>\n",
       "      <td>0.335455</td>\n",
       "      <td>2018-04-24</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.497691</td>\n",
       "      <td>2.538481</td>\n",
       "      <td>2.392158</td>\n",
       "      <td>2.520191</td>\n",
       "      <td>2.627946</td>\n",
       "      <td>-0.231126</td>\n",
       "      <td>2018-04-25</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2.580615</td>\n",
       "      <td>2.698649</td>\n",
       "      <td>2.571146</td>\n",
       "      <td>2.663033</td>\n",
       "      <td>2.758975</td>\n",
       "      <td>-0.952587</td>\n",
       "      <td>2018-04-26</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.693390</td>\n",
       "      <td>2.705371</td>\n",
       "      <td>2.631172</td>\n",
       "      <td>2.672998</td>\n",
       "      <td>2.768116</td>\n",
       "      <td>-1.062539</td>\n",
       "      <td>2018-04-27</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       open      high       low     close  adj_close    volume       date  \\\n",
       "0  2.719927  2.752413  2.632263  2.686285   2.780305 -0.407123 2018-04-23   \n",
       "1  2.755308  2.755773  2.419443  2.503582   2.612709  0.335455 2018-04-24   \n",
       "2  2.497691  2.538481  2.392158  2.520191   2.627946 -0.231126 2018-04-25   \n",
       "3  2.580615  2.698649  2.571146  2.663033   2.758975 -0.952587 2018-04-26   \n",
       "4  2.693390  2.705371  2.631172  2.672998   2.768116 -1.062539 2018-04-27   \n",
       "\n",
       "   month  \n",
       "0      4  \n",
       "1      4  \n",
       "2      4  \n",
       "3      4  \n",
       "4      4  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Do scaling for test set\n",
    "test_scaled  = scaler.transform(test[['open', 'high', 'low', 'close', 'adj_close', 'volume']])\n",
    "\n",
    "# Convert the numpy array back into pandas dataframe\n",
    "test_scaled = pd.DataFrame(test_scaled, columns=['open', 'high', 'low', 'close', 'adj_close', 'volume'])\n",
    "test_scaled[['date', 'month']] = test.reset_index()[['date', 'month']]\n",
    "print(\"test_scaled.shape = \" + str(test_scaled.shape))\n",
    "test_scaled.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>adj_close</th>\n",
       "      <th>volume</th>\n",
       "      <th>date</th>\n",
       "      <th>month</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.626877</td>\n",
       "      <td>-0.663773</td>\n",
       "      <td>-0.593885</td>\n",
       "      <td>-0.633382</td>\n",
       "      <td>-0.778413</td>\n",
       "      <td>-0.562512</td>\n",
       "      <td>2015-11-25</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.618032</td>\n",
       "      <td>-0.652573</td>\n",
       "      <td>-0.597159</td>\n",
       "      <td>-0.615666</td>\n",
       "      <td>-0.762926</td>\n",
       "      <td>-1.485746</td>\n",
       "      <td>2015-11-27</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.597024</td>\n",
       "      <td>-0.642492</td>\n",
       "      <td>-0.609164</td>\n",
       "      <td>-0.666601</td>\n",
       "      <td>-0.807452</td>\n",
       "      <td>0.746574</td>\n",
       "      <td>2015-11-30</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.618032</td>\n",
       "      <td>-0.602170</td>\n",
       "      <td>-0.580788</td>\n",
       "      <td>-0.554764</td>\n",
       "      <td>-0.709689</td>\n",
       "      <td>-0.108650</td>\n",
       "      <td>2015-12-01</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.561644</td>\n",
       "      <td>-0.595450</td>\n",
       "      <td>-0.634266</td>\n",
       "      <td>-0.679888</td>\n",
       "      <td>-0.819067</td>\n",
       "      <td>0.250770</td>\n",
       "      <td>2015-12-02</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       open      high       low     close  adj_close    volume       date  \\\n",
       "0 -0.626877 -0.663773 -0.593885 -0.633382  -0.778413 -0.562512 2015-11-25   \n",
       "1 -0.618032 -0.652573 -0.597159 -0.615666  -0.762926 -1.485746 2015-11-27   \n",
       "2 -0.597024 -0.642492 -0.609164 -0.666601  -0.807452  0.746574 2015-11-30   \n",
       "3 -0.618032 -0.602170 -0.580788 -0.554764  -0.709689 -0.108650 2015-12-01   \n",
       "4 -0.561644 -0.595450 -0.634266 -0.679888  -0.819067  0.250770 2015-12-02   \n",
       "\n",
       "   month  \n",
       "0     11  \n",
       "1     11  \n",
       "2     11  \n",
       "3     12  \n",
       "4     12  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Combine back train_scaled, cv_scaled, test_scaled together\n",
    "df_scaled = pd.concat([train_scaled, cv_scaled, test_scaled], axis=0)\n",
    "df_scaled.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Feature Engineering"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "We will generate the following features:\n",
    "* Mean 'adj_close' of each month\n",
    "* Difference between high and low of each day\n",
    "* Difference between open and close of each day\n",
    "* Mean volume of each month"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>adj_close</th>\n",
       "      <th>volume</th>\n",
       "      <th>date</th>\n",
       "      <th>month</th>\n",
       "      <th>range_hl</th>\n",
       "      <th>range_oc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.778413</td>\n",
       "      <td>-0.562512</td>\n",
       "      <td>2015-11-25</td>\n",
       "      <td>11</td>\n",
       "      <td>-0.069888</td>\n",
       "      <td>0.006505</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.762926</td>\n",
       "      <td>-1.485746</td>\n",
       "      <td>2015-11-27</td>\n",
       "      <td>11</td>\n",
       "      <td>-0.055414</td>\n",
       "      <td>-0.002367</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.807452</td>\n",
       "      <td>0.746574</td>\n",
       "      <td>2015-11-30</td>\n",
       "      <td>11</td>\n",
       "      <td>-0.033328</td>\n",
       "      <td>0.069577</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.709689</td>\n",
       "      <td>-0.108650</td>\n",
       "      <td>2015-12-01</td>\n",
       "      <td>12</td>\n",
       "      <td>-0.021382</td>\n",
       "      <td>-0.063268</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.819067</td>\n",
       "      <td>0.250770</td>\n",
       "      <td>2015-12-02</td>\n",
       "      <td>12</td>\n",
       "      <td>0.038816</td>\n",
       "      <td>0.118244</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   adj_close    volume       date  month  range_hl  range_oc\n",
       "0  -0.778413 -0.562512 2015-11-25     11 -0.069888  0.006505\n",
       "1  -0.762926 -1.485746 2015-11-27     11 -0.055414 -0.002367\n",
       "2  -0.807452  0.746574 2015-11-30     11 -0.033328  0.069577\n",
       "3  -0.709689 -0.108650 2015-12-01     12 -0.021382 -0.063268\n",
       "4  -0.819067  0.250770 2015-12-02     12  0.038816  0.118244"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Get difference between high and low of each day\n",
    "df_scaled['range_hl'] = df_scaled['high'] - df_scaled['low']\n",
    "df_scaled.drop(['high', 'low'], axis=1, inplace=True)\n",
    "\n",
    "# Get difference between open and close of each day\n",
    "df_scaled['range_oc'] = df_scaled['open'] - df_scaled['close']\n",
    "df_scaled.drop(['open', 'close'], axis=1, inplace=True)\n",
    "\n",
    "df_scaled.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we use lags up to N number of days to use as features."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['adj_close', 'range_hl', 'range_oc', 'volume']"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Add a column 'order_day' to indicate the order of the rows by date\n",
    "df_scaled['order_day'] = [x for x in list(range(len(df_scaled)))]\n",
    "\n",
    "# merging_keys\n",
    "merging_keys = ['order_day']\n",
    "\n",
    "# List of columns that we will use to create lags\n",
    "lag_cols = ['adj_close', 'range_hl', 'range_oc', 'volume']\n",
    "lag_cols"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "58c3b16527174eb3a50baeaa2ad7e524",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "A Jupyter Widget"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>adj_close</th>\n",
       "      <th>volume</th>\n",
       "      <th>date</th>\n",
       "      <th>month</th>\n",
       "      <th>range_hl</th>\n",
       "      <th>range_oc</th>\n",
       "      <th>order_day</th>\n",
       "      <th>adj_close_lag_1</th>\n",
       "      <th>range_hl_lag_1</th>\n",
       "      <th>range_oc_lag_1</th>\n",
       "      <th>...</th>\n",
       "      <th>range_oc_lag_5</th>\n",
       "      <th>volume_lag_5</th>\n",
       "      <th>adj_close_lag_6</th>\n",
       "      <th>range_hl_lag_6</th>\n",
       "      <th>range_oc_lag_6</th>\n",
       "      <th>volume_lag_6</th>\n",
       "      <th>adj_close_lag_7</th>\n",
       "      <th>range_hl_lag_7</th>\n",
       "      <th>range_oc_lag_7</th>\n",
       "      <th>volume_lag_7</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-0.867462</td>\n",
       "      <td>0.296862</td>\n",
       "      <td>2015-12-07</td>\n",
       "      <td>12</td>\n",
       "      <td>0.016304</td>\n",
       "      <td>0.077418</td>\n",
       "      <td>7</td>\n",
       "      <td>-0.786156</td>\n",
       "      <td>0.094567</td>\n",
       "      <td>-0.172597</td>\n",
       "      <td>...</td>\n",
       "      <td>0.069577</td>\n",
       "      <td>0.746574</td>\n",
       "      <td>-0.762926</td>\n",
       "      <td>-0.055414</td>\n",
       "      <td>-0.002367</td>\n",
       "      <td>-1.485746</td>\n",
       "      <td>-0.778413</td>\n",
       "      <td>-0.069888</td>\n",
       "      <td>0.006505</td>\n",
       "      <td>-0.562512</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>-0.929412</td>\n",
       "      <td>0.405431</td>\n",
       "      <td>2015-12-08</td>\n",
       "      <td>12</td>\n",
       "      <td>0.005079</td>\n",
       "      <td>0.005656</td>\n",
       "      <td>8</td>\n",
       "      <td>-0.867462</td>\n",
       "      <td>0.016304</td>\n",
       "      <td>0.077418</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.063268</td>\n",
       "      <td>-0.108650</td>\n",
       "      <td>-0.807452</td>\n",
       "      <td>-0.033328</td>\n",
       "      <td>0.069577</td>\n",
       "      <td>0.746574</td>\n",
       "      <td>-0.762926</td>\n",
       "      <td>-0.055414</td>\n",
       "      <td>-0.002367</td>\n",
       "      <td>-1.485746</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>-1.017496</td>\n",
       "      <td>1.155581</td>\n",
       "      <td>2015-12-09</td>\n",
       "      <td>12</td>\n",
       "      <td>0.130500</td>\n",
       "      <td>0.063300</td>\n",
       "      <td>9</td>\n",
       "      <td>-0.929412</td>\n",
       "      <td>0.005079</td>\n",
       "      <td>0.005656</td>\n",
       "      <td>...</td>\n",
       "      <td>0.118244</td>\n",
       "      <td>0.250770</td>\n",
       "      <td>-0.709689</td>\n",
       "      <td>-0.021382</td>\n",
       "      <td>-0.063268</td>\n",
       "      <td>-0.108650</td>\n",
       "      <td>-0.807452</td>\n",
       "      <td>-0.033328</td>\n",
       "      <td>0.069577</td>\n",
       "      <td>0.746574</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>-0.987490</td>\n",
       "      <td>0.795215</td>\n",
       "      <td>2015-12-10</td>\n",
       "      <td>12</td>\n",
       "      <td>0.005195</td>\n",
       "      <td>-0.011936</td>\n",
       "      <td>10</td>\n",
       "      <td>-1.017496</td>\n",
       "      <td>0.130500</td>\n",
       "      <td>0.063300</td>\n",
       "      <td>...</td>\n",
       "      <td>0.205855</td>\n",
       "      <td>0.548150</td>\n",
       "      <td>-0.819067</td>\n",
       "      <td>0.038816</td>\n",
       "      <td>0.118244</td>\n",
       "      <td>0.250770</td>\n",
       "      <td>-0.709689</td>\n",
       "      <td>-0.021382</td>\n",
       "      <td>-0.063268</td>\n",
       "      <td>-0.108650</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>-1.187854</td>\n",
       "      <td>1.826144</td>\n",
       "      <td>2015-12-11</td>\n",
       "      <td>12</td>\n",
       "      <td>0.024533</td>\n",
       "      <td>0.105603</td>\n",
       "      <td>11</td>\n",
       "      <td>-0.987490</td>\n",
       "      <td>0.005195</td>\n",
       "      <td>-0.011936</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.172597</td>\n",
       "      <td>1.403301</td>\n",
       "      <td>-0.973937</td>\n",
       "      <td>0.148965</td>\n",
       "      <td>0.205855</td>\n",
       "      <td>0.548150</td>\n",
       "      <td>-0.819067</td>\n",
       "      <td>0.038816</td>\n",
       "      <td>0.118244</td>\n",
       "      <td>0.250770</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 35 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    adj_close    volume       date  month  range_hl  range_oc  order_day  \\\n",
       "7   -0.867462  0.296862 2015-12-07     12  0.016304  0.077418          7   \n",
       "8   -0.929412  0.405431 2015-12-08     12  0.005079  0.005656          8   \n",
       "9   -1.017496  1.155581 2015-12-09     12  0.130500  0.063300          9   \n",
       "10  -0.987490  0.795215 2015-12-10     12  0.005195 -0.011936         10   \n",
       "11  -1.187854  1.826144 2015-12-11     12  0.024533  0.105603         11   \n",
       "\n",
       "    adj_close_lag_1  range_hl_lag_1  range_oc_lag_1      ...       \\\n",
       "7         -0.786156        0.094567       -0.172597      ...        \n",
       "8         -0.867462        0.016304        0.077418      ...        \n",
       "9         -0.929412        0.005079        0.005656      ...        \n",
       "10        -1.017496        0.130500        0.063300      ...        \n",
       "11        -0.987490        0.005195       -0.011936      ...        \n",
       "\n",
       "    range_oc_lag_5  volume_lag_5  adj_close_lag_6  range_hl_lag_6  \\\n",
       "7         0.069577      0.746574        -0.762926       -0.055414   \n",
       "8        -0.063268     -0.108650        -0.807452       -0.033328   \n",
       "9         0.118244      0.250770        -0.709689       -0.021382   \n",
       "10        0.205855      0.548150        -0.819067        0.038816   \n",
       "11       -0.172597      1.403301        -0.973937        0.148965   \n",
       "\n",
       "    range_oc_lag_6  volume_lag_6  adj_close_lag_7  range_hl_lag_7  \\\n",
       "7        -0.002367     -1.485746        -0.778413       -0.069888   \n",
       "8         0.069577      0.746574        -0.762926       -0.055414   \n",
       "9        -0.063268     -0.108650        -0.807452       -0.033328   \n",
       "10        0.118244      0.250770        -0.709689       -0.021382   \n",
       "11        0.205855      0.548150        -0.819067        0.038816   \n",
       "\n",
       "    range_oc_lag_7  volume_lag_7  \n",
       "7         0.006505     -0.562512  \n",
       "8        -0.002367     -1.485746  \n",
       "9         0.069577      0.746574  \n",
       "10       -0.063268     -0.108650  \n",
       "11        0.118244      0.250770  \n",
       "\n",
       "[5 rows x 35 columns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "shift_range = [x+1 for x in range(N)]\n",
    "\n",
    "for shift in tqdm_notebook(shift_range):\n",
    "    train_shift = df_scaled[merging_keys + lag_cols].copy()\n",
    "    \n",
    "    # E.g. order_day of 0 becomes 1, for shift = 1.\n",
    "    # So when this is merged with order_day of 1 in df_scaled, this will represent lag of 1.\n",
    "    train_shift['order_day'] = train_shift['order_day'] + shift\n",
    "    \n",
    "    foo = lambda x: '{}_lag_{}'.format(x, shift) if x in lag_cols else x\n",
    "    train_shift = train_shift.rename(columns=foo)\n",
    "\n",
    "    df_scaled = pd.merge(df_scaled, train_shift, on=merging_keys, how='left') #.fillna(0)\n",
    "    \n",
    "del train_shift\n",
    "\n",
    "# Remove the first N rows which contain NaNs\n",
    "df_scaled = df_scaled[N:]\n",
    "    \n",
    "df_scaled.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 748 entries, 7 to 754\n",
      "Data columns (total 35 columns):\n",
      "adj_close          748 non-null float64\n",
      "volume             748 non-null float64\n",
      "date               748 non-null datetime64[ns]\n",
      "month              748 non-null int64\n",
      "range_hl           748 non-null float64\n",
      "range_oc           748 non-null float64\n",
      "order_day          748 non-null int64\n",
      "adj_close_lag_1    748 non-null float64\n",
      "range_hl_lag_1     748 non-null float64\n",
      "range_oc_lag_1     748 non-null float64\n",
      "volume_lag_1       748 non-null float64\n",
      "adj_close_lag_2    748 non-null float64\n",
      "range_hl_lag_2     748 non-null float64\n",
      "range_oc_lag_2     748 non-null float64\n",
      "volume_lag_2       748 non-null float64\n",
      "adj_close_lag_3    748 non-null float64\n",
      "range_hl_lag_3     748 non-null float64\n",
      "range_oc_lag_3     748 non-null float64\n",
      "volume_lag_3       748 non-null float64\n",
      "adj_close_lag_4    748 non-null float64\n",
      "range_hl_lag_4     748 non-null float64\n",
      "range_oc_lag_4     748 non-null float64\n",
      "volume_lag_4       748 non-null float64\n",
      "adj_close_lag_5    748 non-null float64\n",
      "range_hl_lag_5     748 non-null float64\n",
      "range_oc_lag_5     748 non-null float64\n",
      "volume_lag_5       748 non-null float64\n",
      "adj_close_lag_6    748 non-null float64\n",
      "range_hl_lag_6     748 non-null float64\n",
      "range_oc_lag_6     748 non-null float64\n",
      "volume_lag_6       748 non-null float64\n",
      "adj_close_lag_7    748 non-null float64\n",
      "range_hl_lag_7     748 non-null float64\n",
      "range_oc_lag_7     748 non-null float64\n",
      "volume_lag_7       748 non-null float64\n",
      "dtypes: datetime64[ns](1), float64(32), int64(2)\n",
      "memory usage: 210.4 KB\n"
     ]
    }
   ],
   "source": [
    "df_scaled.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# # Get mean of adj_close of each month\n",
    "# df_gb = df.groupby(['month'], as_index=False).agg({'adj_close':'mean'})\n",
    "# df_gb = df_gb.rename(columns={'adj_close':'adj_close_mean'})\n",
    "# df_gb\n",
    "\n",
    "# # Merge to main df\n",
    "# df = df.merge(df_gb, \n",
    "#               left_on=['month'], \n",
    "#               right_on=['month'],\n",
    "#               how='left').fillna(0)\n",
    "\n",
    "# # Merge to main df\n",
    "# shift_range = [x+1 for x in range(2)]\n",
    "\n",
    "# for shift in tqdm_notebook(shift_range):\n",
    "#     train_shift = df[merging_keys + lag_cols].copy()\n",
    "    \n",
    "#     # E.g. order_day of 0 becomes 1, for shift = 1.\n",
    "#     # So when this is merged with order_day of 1 in df, this will represent lag of 1.\n",
    "#     train_shift['order_day'] = train_shift['order_day'] + shift\n",
    "    \n",
    "#     foo = lambda x: '{}_lag_{}'.format(x, shift) if x in lag_cols else x\n",
    "#     train_shift = train_shift.rename(columns=foo)\n",
    "\n",
    "#     df = pd.merge(df, train_shift, on=merging_keys, how='left') #.fillna(0)\n",
    "    \n",
    "# del train_shift\n",
    "    \n",
    "# df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# # Get mean of volume of each month\n",
    "# df_gb = df.groupby(['month'], as_index=False).agg({'volume':'mean'})\n",
    "# df_gb = df_gb.rename(columns={'volume':'volume_mean'})\n",
    "# df_gb\n",
    "\n",
    "# # Merge to main df\n",
    "# df = df.merge(df_gb, \n",
    "#               left_on=['month'], \n",
    "#               right_on=['month'],\n",
    "#               how='left').fillna(0)\n",
    "\n",
    "# df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# Split the scaled features back into train, dev and test set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_train.shape = (453, 28)\n",
      "y_train.shape = (453,)\n",
      "X_cv.shape = (151, 28)\n",
      "y_cv.shape = (151,)\n",
      "X_train_cv.shape = (604, 28)\n",
      "y_train_cv.shape = (604,)\n",
      "X_sample.shape = (144, 28)\n",
      "y_sample.shape = (144,)\n"
     ]
    }
   ],
   "source": [
    "features = [\n",
    "\"adj_close_lag_1\",\n",
    "\"range_hl_lag_1\",\n",
    "\"range_oc_lag_1\",\n",
    "\"volume_lag_1\",\n",
    "\"adj_close_lag_2\",\n",
    "\"range_hl_lag_2\",\n",
    "\"range_oc_lag_2\",\n",
    "\"volume_lag_2\",\n",
    "\"adj_close_lag_3\",\n",
    "\"range_hl_lag_3\",\n",
    "\"range_oc_lag_3\",\n",
    "\"volume_lag_3\",\n",
    "\"adj_close_lag_4\",\n",
    "\"range_hl_lag_4\",\n",
    "\"range_oc_lag_4\",\n",
    "\"volume_lag_4\",\n",
    "\"adj_close_lag_5\",\n",
    "\"range_hl_lag_5\",\n",
    "\"range_oc_lag_5\",\n",
    "\"volume_lag_5\",\n",
    "\"adj_close_lag_6\",\n",
    "\"range_hl_lag_6\",\n",
    "\"range_oc_lag_6\",\n",
    "\"volume_lag_6\",\n",
    "\"adj_close_lag_7\",\n",
    "\"range_hl_lag_7\",\n",
    "\"range_oc_lag_7\",\n",
    "\"volume_lag_7\"\n",
    "]\n",
    "\n",
    "target = \"adj_close\"\n",
    "\n",
    "# Split into train, cv, and test\n",
    "train = df_scaled[:num_train]\n",
    "cv = df_scaled[num_train:num_train+num_cv]\n",
    "train_cv = df_scaled[:num_train+num_cv]\n",
    "test = df_scaled[num_train+num_cv:]\n",
    "\n",
    "# Split into X and y\n",
    "X_train = train[features]\n",
    "y_train = train[target]\n",
    "X_cv = cv[features]\n",
    "y_cv = cv[target]\n",
    "X_train_cv = train_cv[features]\n",
    "y_train_cv = train_cv[target]\n",
    "X_sample = test[features]\n",
    "y_sample = test[target]\n",
    "print(\"X_train.shape = \" + str(X_train.shape))\n",
    "print(\"y_train.shape = \" + str(y_train.shape))\n",
    "print(\"X_cv.shape = \" + str(X_cv.shape))\n",
    "print(\"y_cv.shape = \" + str(y_cv.shape))\n",
    "print(\"X_train_cv.shape = \" + str(X_train_cv.shape))\n",
    "print(\"y_train_cv.shape = \" + str(y_train_cv.shape))\n",
    "print(\"X_sample.shape = \" + str(X_sample.shape))\n",
    "print(\"y_sample.shape = \" + str(y_sample.shape))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# EDA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x1a1eddc160>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a1ee27908>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot adjusted close over time\n",
    "rcParams['figure.figsize'] = 10, 8 # width 10, height 8\n",
    "\n",
    "ax = train.plot(x='date', y='adj_close', style='b-', grid=True)\n",
    "ax = cv.plot(x='date', y='adj_close', style='y-', grid=True, ax=ax)\n",
    "ax = test.plot(x='date', y='adj_close', style='g-', grid=True, ax=ax)\n",
    "ax.legend(['train', 'dev', 'test'])\n",
    "ax.set_xlabel(\"date\")\n",
    "ax.set_ylabel(\"USD (scaled)\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# Train the model using XGBoost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "XGBRegressor(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n",
       "       colsample_bytree=1, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=3, min_child_weight=1, missing=None, n_estimators=100,\n",
       "       n_jobs=1, nthread=None, objective='reg:linear', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=100,\n",
       "       silent=True, subsample=1)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create the model\n",
    "model = XGBRegressor(seed=model_seed,\n",
    "                      n_estimators=n_estimators,\n",
    "                      max_depth=max_depth,\n",
    "                      learning_rate=learning_rate,\n",
    "                      min_child_weight=min_child_weight)\n",
    "\n",
    "# Train the regressor\n",
    "model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Predict on train set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.038541089571324974"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Do prediction on train set\n",
    "est = model.predict(X_train)\n",
    "\n",
    "# Calculate RMSE\n",
    "math.sqrt(mean_squared_error(y_train, est))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x1a1f074320>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nOF57ULiIiIiI7D8VYyIiIiIuUjEmIiIi4iIVYyIiIiIuUjEmIiIi4iIVYyISFowx9xtjfreX9Wcb\nYw71Z0wiIqBiTESk2dmAijER8TvNMyYiIcsYczdwBZCL8zDj+cB24FogBliDM2nl4cCHnnXbgfM8\nu3gGyACqgF9Za1f4M34RCQ8qxkQkJBljRgCvAqOAKGAB8DzOY1u2edo8CBRYa58yxrwKfGitfduz\n7gvgemvtamPMKOBha+3x/s9EREJdlNsBiIj4yBhgqrW2CsAY875n+WBPEZYGJAHTdt3QGJMEHA38\nxxjTvDjW5xGLSFhSMSYioaytrv9XgbOttYuNMVcB49poEwGUWmsP911oIiIODeAXkVD1DXCOMSbe\nGJMMnOlZngzkG2OigctatS/3rMNaWwasM8ZcAGAcQ/0XuoiEE40ZE5GQ1WoA/wYgD1gOVAK/9yxb\nCiRba68yxhwDTAZqgfOBJuA5oDMQDbxprf2T35MQkZCnYkxERETERbpMKSIiIuIiFWMiIiIiLlIx\nJiIiIuIiFWMiIiIiLlIxJiIiIuIiFWMiIiIiLlIxJiIiIuIiFWMiIiIiLvr/2BeSLj8be9cAAAAA\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a1efd96d8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot adjusted close over time\n",
    "rcParams['figure.figsize'] = 10, 8 # width 10, height 8\n",
    "\n",
    "est_df = pd.DataFrame({'est': est, \n",
    "                       'date': train['date']})\n",
    "\n",
    "ax = train.plot(x='date', y='adj_close', style='b-', grid=True)\n",
    "ax = cv.plot(x='date', y='adj_close', style='y-', grid=True, ax=ax)\n",
    "ax = test.plot(x='date', y='adj_close', style='g-', grid=True, ax=ax)\n",
    "ax = est_df.plot(x='date', y='est', style='r-', grid=True, ax=ax)\n",
    "ax.legend(['train', 'dev', 'test', 'est'])\n",
    "ax.set_xlabel(\"date\")\n",
    "ax.set_ylabel(\"USD (scaled)\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Predict on dev set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.03749596629893"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Do prediction on test set\n",
    "est = model.predict(X_cv)\n",
    "\n",
    "# Calculate RMSE\n",
    "math.sqrt(mean_squared_error(y_cv, est))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x1a1f26d390>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nMiVjBdC2rS9Xry7+Z82cWc3AgdClS7wvPzETERGRyqJkrABat/ZlNH1SsSxZAosWtWLAANi40fd9\n+9s+DZKIiIhUJiVjBdCmjS+LnYy9954vBwzw4S3AZwAQERGRyqWnKQugVMnYlCm+HDDAxxWrqvI5\nMUVERKRyKRkrgFLWjLVqtZEddmhGVRXccENxP09ERESKT82UBVCqZGzJEujYcT1V+tZERERSQ7/W\nC6BUydjq1dCq1abifoiIiIiUlJKxAihVMrZmDbRsqWRMREQkTZSMFUApk7HWrTcW90NERESkpJSM\nFUApmylVMyYiIpIuSsYKIBr0de3a4n6OasZERETSR8lYAZh5QlasmrFotH3VjImIiKSPxhkrkDZt\nipeMDRkCXbt6Mta6tZIxERGRNFEyViDt2sHy5YW/7saN8M478faQIWqmFBERSRMlYwXSrRssWlTY\na65aBXffXXOfxhkTERFJF/UZK5AoGXvhBbj22sJcc8yYza+lZExERCRdlIwVSNeusHAhHH00/OQn\n9Z/3yScwahTccsvWmzUnTIjXTzvNl61aqZlSREQkTdRMWSDdunkyFgnBn7Ks7bbb4J57fH2PPeIk\nqy4TJ8br558PL74IvXoVefwMERERKSnVjBVIt26wdGm8vW5d3ectXx4naStW1H+9TZtg0qR4e7fd\n4LPP4Kij5je9sCIiIlI2lIwVyN5719yub5iLNWuge3dfX7my/ut9/HHN4336+PAZddW2iYiISOVS\nMlYgI0bAvHlw6qm+XV8ytnp1nIytWlX3OffeC0ceWXNfNMq/iIiIpIuSsQLq0QNOPtnX+/at+5w1\na6BzZ6iqqr9m7OKLvaO/iIiIpJ+SsQKLJg3fVM8IFGvWQHW1DxL73/8NTz655WtNnAizZxe+nCIi\nIlIelIwVWJSM1Wf16rjv19y58JWvbH5Onz6+vP9+GDw43hYREZH0UTJWYPnJWAi+XLzYkzCIa8aW\nLav/GlVV8M1vwllnFa2YIiIiUiaUjBVYfkf7qBP/l78MV14Jzz0HM2bUTNiizvz5VqyADh2KWkwR\nEREpExr0tcDyE61Vq7wWbNYs70N2772+v7o6Pqdt25rvD8HHIlMyJiIikg2qGSuw2slYtJw8ueY5\nvXrVPCeyerUnbkrGREREskHJWIFV5f2LRonVmjU1n65s0wamToULLth8eItovkolYyIiItmgZKzA\n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\nIiIiIgn6/w9SNfw5RjFoAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a1f017390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot adjusted close over time\n",
    "rcParams['figure.figsize'] = 10, 8 # width 10, height 8\n",
    "\n",
    "est_df = pd.DataFrame({'est': est, \n",
    "                       'y_cv': y_cv,\n",
    "                       'date': cv['date']})\n",
    "\n",
    "ax = train.plot(x='date', y='adj_close', style='b-', grid=True)\n",
    "ax = cv.plot(x='date', y='adj_close', style='y-', grid=True, ax=ax)\n",
    "ax = test.plot(x='date', y='adj_close', style='g-', grid=True, ax=ax)\n",
    "ax = est_df.plot(x='date', y='est', style='r-', grid=True, ax=ax)\n",
    "ax.legend(['train', 'dev', 'test', 'est'])\n",
    "ax.set_xlabel(\"date\")\n",
    "ax.set_ylabel(\"USD (scaled)\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# Findings\n",
    "* Doesn't work well\n",
    "* Likely because the model was trained on prices below ~1.7 and so when it saw prices above 1.7 for the dev set, it could not generalize well"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
